home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / dev / amos / modifile.lha / ModificaFileEng.AMOS / ModificaFileEng.amosSourceCode
AMOS Source Code  |  1999-04-24  |  16KB  |  551 lines

  1. '-> ModificaFileEng by Stefano Regattin    
  2. 'd> 15 febbraio 1998 da Guardafile2Eng     
  3. 'm> 16 febbraio 1998 
  4. 'm> 20 marzo 1998
  5. 'm> 13 aprile 1998 
  6. 'm> 10,11 maggio 1998
  7. 'm> 26,27 giugno 1998
  8. 'm> 3,4 gennaio 1999 
  9. 'm> 4,6,12,15,24 aprile 1999   
  10. '----------------------------  
  11. Set Buffer 260
  12. Dim PAGINA(65534)
  13. '------------------------------------------------------------------
  14. 'The pages can't be more of the variables PAGINA(), that are 65535 
  15. '------------------------------------------------------------------
  16. 'The array PAGINA() holds the address for each page
  17. 'The string FILE$ holds the whole path and name of the file to read
  18. 'The string NOMEFILE$ holds the name of the file to read 
  19. 'The string PERCORSO$ holds the path of the file to read 
  20. 'The variable BANCO holds the number of the bank used  
  21. 'The variable BYTE holds the number of the byte to show
  22. 'The variable BYTEPERLINEA holds the number of bytes to show in exadecimal 
  23. ' mode 
  24. 'If the flag CARATTEREINVISIBILE is activated, the program will show the 
  25. ' invisible characters 
  26. 'The variable CARATTEREMESSAGGIO holds the character to be shown for the 
  27. ' scroll of the message
  28. 'The variable DATO holds the datum to show 
  29. 'If the flag ESADECIMALE is activated, the program will show the data in 
  30. ' exadecimal format
  31. 'The flag FILENONTROVATO inform the program that there isn't a file to load
  32. 'The variable PAGINA holds the number of the current page
  33. 'The variable POSIZIONE holds the address of the datum 
  34. 'If the flag SENZAMEMORIA is activated, the program quits
  35. 'If the flag TESTO is activated, the program will show the data as a text
  36. 'If the flag TESTOTAGLIATO is activated, the program will forget the 
  37. ' characters that go out from the screen right margin
  38. 'The variable ULTIMALINEA holds the number of the latest line of the screen
  39. 'The variable _ERRORE holds the number of the error that occurs when the 
  40. ' program exceeds the maximum number of pages allowed
  41. BANCO=65535
  42. Global FILE$,NOMEFILE$,PERCORSO$
  43. Global BANCO,BYTE,BYTEPERLINEA,CARATTEREINVISIBILE,CARATTEREMESSAGGIO,DATO
  44. Global ESADECIMALE,FILENONTROVATO,M0DIFICA,PAGINA,POSIZIONE,SENZAMEMORIA,TESTO,TESTOTAGLIATO
  45. Global ULTIMALINEA,_ERRORE
  46. Global PAGINA()
  47. Proc SETTASCHERMO
  48. Proc ARCOBALENO
  49. Do 
  50.  Proc CARICAUNFILE : Exit If FILENONTROVATO=True
  51.  M0DIFICA=False
  52.  Repeat 
  53.   If SENZAMEMORIA=True
  54.    TIC["Insufficient memory, press a key",ULTIMALINEA]
  55.    Wait Key : Exit 
  56.   End If 
  57.   Proc SCELTE
  58.   Proc VISUALIZZA
  59.   Cls : Proc TIC["Do you want to see it again (y/n) ?",ULTIMALINEA]
  60.   RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  61.  Until RISPOSTA$<>"y"
  62. Loop 
  63. Rainbow Del 0 : Screen Close 0 : Erase BANCO : End 
  64. Procedure ARCOBALENO
  65. '--------
  66. 'Rainbow 
  67. '--------
  68. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  69. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  70. Set Rainbow 0,1,16,"","",""
  71. For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  72. If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  73. Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  74. End Proc
  75. Procedure CARICAUNFILE
  76. '------------- 
  77. 'Loads a file  
  78. '------------- 
  79. Show On : Cls 
  80. FILE$=Fsel$("**","","Load a file","Press Esc to quit")
  81. If FILE$<>"" and Exist(FILE$)
  82.  Open In 1,FILE$
  83.  LUNGHEZZABANCO=Lof(1)
  84.  Close 1
  85.  SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  86.  For A=1 To Len(FILE$)
  87.   If Instr(FILE$,"/",POSIZIONE)>0
  88.    SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  89.    POSIZIONE=SEPARATORECASSETTO+1
  90.   End If 
  91.  Next A
  92.  SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  93.  PERCORSO$=Left$(FILE$,SEPARATORE)
  94.  NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  95.  MEMORIA=Chip Free+Fast Free
  96.  If LUNGHEZZABANCO>MEMORIA
  97.   Proc TIC["There is no memory to load the file",ULTIMALINEA-1]
  98.   Proc TIC[NOMEFILE$,ULTIMALINEA] : Wait 200
  99.   SENZAMEMORIA=True
  100.  Else 
  101.   Reserve As Work BANCO,LUNGHEZZABANCO
  102.   Bload FILE$,Start(BANCO)
  103.   SENZAMEMORIA=False
  104.  End If 
  105. Else 
  106. FILENONTROVATO=True
  107. End If 
  108. End Proc
  109. Procedure DASTRINGAANUMERO[DATO$]
  110. DATO$=Upper$(DATO$)
  111. If DATO$="0"
  112.  D=0
  113. Else If DATO$="1"
  114.  D=1
  115. Else If DATO$="2"
  116.  D=2
  117. Else If DATO$="3"
  118.  D=3
  119. Else If DATO$="4"
  120.  D=4
  121. Else If DATO$="5"
  122.  D=5
  123. Else If DATO$="6"
  124.  D=6
  125. Else If DATO$="7"
  126.  D=7
  127. Else If DATO$="8"
  128.  D=8
  129. Else If DATO$="9"
  130.  D=9
  131. Else If DATO$="A"
  132.  D=10
  133. Else If DATO$="B"
  134.  D=11
  135. Else If DATO$="C"
  136.  D=12
  137. Else If DATO$="D"
  138.  D=13
  139. Else If DATO$="E"
  140.  D=14
  141. Else If DATO$="F"
  142.  D=15
  143. Else 
  144.  D=16
  145. End If 
  146. End Proc[D]
  147. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  148. '----------------------
  149. 'Limits of two numbers 
  150. '----------------------
  151. '-> Limiti by Stefano Regattin 
  152. 'i> 19 maggio 1996 
  153. 'm> 12 giugno 1996 
  154. '------------------------------------------------------------
  155. 'The procedure is equivalent to the following program lines: 
  156. ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  157. ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  158. 'If LIMITEMINIMO is major of LIMITEMASSIMO it swaps the values 
  159. '--------------------------------------------------------------  
  160. If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  161. NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  162. End Proc[NUMERO]
  163. Procedure MERITI
  164. '--------
  165. 'Credits 
  166. '--------
  167. Cls 
  168. Centre "ModificaFile has been realized by AMOS Professional version 2.00"
  169. Print : Print 
  170. Centre "and compiled by AMOS Professional Compiler version 2.00"
  171. Print : Print 
  172. Centre "If you decide to use it, send by post five (5) U.S. dollars to the following"
  173. Print : Print 
  174. Centre "name and address:"
  175. Print : Print 
  176. Centre "Stefano Regattin"
  177. Print : Print 
  178. Centre "piazza Pietro Gasparri, 4"
  179. Print : Print 
  180. Centre "scala U numero 327"
  181. Print : Print 
  182. Centre "c.a.p. 20161"
  183. Print : Print 
  184. Centre "Milano"
  185. Print : Print 
  186. Centre "Italia (Italy)"
  187. Proc TIC["press a key",ULTIMALINEA]
  188. Wait Key 
  189. BYTE=0 : POSIZIONE=PAGINA(PAGINA)-1
  190. End Proc
  191. Procedure MESSAGGIO[MESSAGGIO$]
  192. Locate 0,ULTIMALINEA
  193. Hscroll 1
  194. Add CARATTEREMESSAGGIO,1,1 To Len(MESSAGGIO$)
  195. Text 631,ULTIMALINEA*8-1+7,Mid$(MESSAGGIO$,CARATTEREMESSAGGIO,1)
  196. Wait 5
  197. End Proc
  198. Procedure M0DIFICA
  199. Fade 5,$66
  200. Get Block 1,0,248,640,8
  201. Proc TIC["Cursor keys>position Tab>hexadecimal mode Typing>ASCII Enter>exit",ULTIMALINEA]
  202. Curs On : BYTE=0
  203. 'CURSOREX=8+BYTEPERLINEA+1 : CURSOREY=0 : Locate CURSOREX,CURSOREY 
  204. 'M0DOMODIFICA$="HEX" 
  205. Print At(8,0);
  206. M0DOMODIFICA$="ASCII"
  207. Repeat 
  208.  Repeat 
  209.   TASTOPREMUTO$=Inkey$
  210.  Until TASTOPREMUTO$<>""
  211.  If TASTOPREMUTO$=Tab$
  212.   TASTODITABULAZIONEPREMUTO=True
  213.   CURSOREY=BYTE/BYTEPERLINEA
  214.   If M0DOMODIFICA$="ASCII"
  215.    M0DOMODIFICA$="HEX"
  216.    CURSOREX=8+BYTEPERLINEA+1+(BYTE mod BYTEPERLINEA)*3
  217.    Locate CURSOREX,CURSOREY
  218.    Proc TIC["Cursor keys>position Tab>ASCII mode Typing>hexadecimal Enter>exit",ULTIMALINEA]
  219.   Else If M0DOMODIFICA$="HEX"
  220.    M0DOMODIFICA$="ASCII"
  221.    Print At(8+BYTE mod BYTEPERLINEA,CURSOREY);
  222.    Proc TIC["Cursor keys>position Tab>hexadecimal mode Typing>ASCII Enter>exit",ULTIMALINEA]
  223.   End If 
  224.  End If 
  225.  If M0DOMODIFICA$="ASCII"
  226.   If TASTOPREMUTO$=Cup$
  227.    Add BYTE,-BYTEPERLINEA,0 To BYTEPERLINEA*31-1
  228.   End If 
  229.   If TASTOPREMUTO$=Cdown$
  230.    Add BYTE,BYTEPERLINEA,0 To BYTEPERLINEA*31-1
  231.   End If 
  232.   If TASTOPREMUTO$=Cleft$
  233.    Add BYTE,-1,0 To BYTEPERLINEA*31-1
  234.   End If 
  235.   If TASTOPREMUTO$=Cright$
  236.    Add BYTE,1,0 To BYTEPERLINEA*31-1
  237.   End If 
  238.   If PAGINA(PAGINA)+BYTE>Length(BANCO)-1
  239.    BYTE=0
  240.   End If 
  241.   CURSOREY=BYTE/BYTEPERLINEA
  242.   If CURSOREY=31
  243.    Locate 8,0 : BYTE=0 : CURSOREY=0
  244.   End If 
  245.   Print At(8+BYTE mod BYTEPERLINEA,CURSOREY);
  246.   TASTOPREMUTO=Asc(TASTOPREMUTO$)
  247.   If TASTOPREMUTO>31
  248.    DATO=TASTOPREMUTO
  249.    Proc MOSTRADATO
  250.    CURSOREX=8+BYTEPERLINEA+1+(BYTE mod BYTEPERLINEA)*3
  251.    Print At(CURSOREX,CURSOREY);Hex$(TASTOPREMUTO,2)-"$";
  252.    Print At(8+BYTE mod BYTEPERLINEA+1,CURSOREY);
  253.    Poke Start(BANCO)+PAGINA(PAGINA)+BYTE,DATO
  254.    Inc BYTE
  255.    M0DIFICA=True
  256.   End If 
  257.  End If 
  258.  If M0DOMODIFICA$="HEX"
  259.   If TASTOPREMUTO$=Cup$
  260.    Add CURSOREY,-1,0 To 30
  261.   End If 
  262.   If TASTOPREMUTO$=Cdown$
  263.    Add CURSOREY,1,0 To 30
  264.   End If 
  265.   If TASTOPREMUTO$=Cleft$
  266.    Add CURSOREX,-3,8+BYTEPERLINEA+1 To 8+BYTEPERLINEA+1+(BYTEPERLINEA-1)*3
  267.   End If 
  268.   If TASTOPREMUTO$=Cright$
  269.    Add CURSOREX,3,8+BYTEPERLINEA+1 To 8+BYTEPERLINEA+1+(BYTEPERLINEA-1)*3
  270.   End If 
  271.   BYTE=(CURSOREX-8-BYTEPERLINEA-1)/3+CURSOREY*BYTEPERLINEA
  272.   If PAGINA(PAGINA)+BYTE>Length(BANCO)-1
  273.    BYTE=0 : CURSOREX=8+BYTEPERLINEA+1 : CURSOREY=0
  274.   End If 
  275.   Locate CURSOREX,CURSOREY
  276.   DATO=Peek(Start(BANCO)+PAGINA(PAGINA)+BYTE)
  277.   Proc DASTRINGAANUMERO[TASTOPREMUTO$] : TASTOPREMUTO=Param
  278.   If TASTOPREMUTO<16 and TASTODITABULAZIONEPREMUTO=False
  279.    Print Hex$(TASTOPREMUTO,1)-"$";
  280.    DATO=TASTOPREMUTO*16
  281.    Repeat 
  282.     DATO$=Input$(1)
  283.     Proc DASTRINGAANUMERO[DATO$] : D=Param
  284.    Until D<16
  285.    Print Hex$(D,1)-"$";
  286.    Add DATO,D
  287.    Poke Start(BANCO)+PAGINA(PAGINA)+BYTE,DATO
  288.    Print At(8+BYTE mod BYTEPERLINEA,CURSOREY);
  289.    Proc MOSTRADATO
  290.    Inc BYTE
  291.    If PAGINA(PAGINA)+BYTE>Length(BANCO)-1
  292.     BYTE=0 : CURSOREX=8+BYTEPERLINEA+1 : CURSOREY=0
  293.    End If 
  294.    Add CURSOREX,3
  295.    If CURSOREX>8+BYTEPERLINEA+1+(BYTEPERLINEA-1)*3
  296.     CURSOREX=8+BYTEPERLINEA+1 : Inc CURSOREY
  297.     If CURSOREY>30
  298.      BYTE=0 : CURSOREY=0
  299.     End If 
  300.    End If 
  301.    Locate CURSOREX,CURSOREY
  302.    M0DIFICA=True
  303.   End If 
  304.  End If 
  305.  TASTODITABULAZIONEPREMUTO=False
  306. Until TASTOPREMUTO$=Chr$(13)
  307. Curs Off 
  308. Put Block 1
  309. Fade 5,$60
  310. End Proc
  311. Procedure MOSTRADATO
  312. '----------------
  313. 'Shows the datum 
  314. '----------------
  315. If DATO<32
  316.  If CARATTEREINVISIBILE=True
  317.   Inverse On : Print Chr$(DATO+64); : Inverse Off 
  318.  End If 
  319. Else 
  320.  Print Chr$(DATO);
  321. End If 
  322. End Proc
  323. Procedure SALVAILFILE
  324. '--------------- 
  325. 'Saves the file
  326. '--------------- 
  327. Get Block 1,0,248,640,8
  328. If M0DIFICA=True
  329.  Proc TIC["Do you really want to save the file (y/n) ?",ULTIMALINEA]
  330.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  331.  If RISPOSTA$="y"
  332.   If Exist(FILE$)
  333.    Bsave FILE$,Start(BANCO) To Start(BANCO)+Length(BANCO)
  334.    Proc TIC["Saving the file "+FILE$,ULTIMALINEA]
  335.    Wait 200
  336.   End If 
  337.  End If 
  338. Else 
  339.  Proc TIC["The file hasn't been modified!",ULTIMALINEA]
  340.  Wait 200
  341. End If 
  342. Put Block 1
  343. End Proc
  344. Procedure SCELTE
  345. '--------------------
  346. 'Choices of the user 
  347. '--------------------
  348. Hide On : Cls : Proc TIC["Do you want to see the exadecimal value (y/n) ?",ULTIMALINEA-1]
  349. RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  350. If RISPOSTA$="y"
  351.  ESADECIMALE=True
  352.  TESTO=False
  353.  CARATTEREINVISIBILE=True
  354.  Proc TIC["Number of Byte for line (01-18) ?",ULTIMALINEA]
  355.  BYTEPERLINEA$=Input$(2) : BYTEPERLINEA=Val(BYTEPERLINEA$)
  356.  Proc LIMITI[BYTEPERLINEA,1,18] : BYTEPERLINEA=Param
  357. Else 
  358.  ESADECIMALE=False
  359.  Cls : Proc TIC["Do you want to see it as text (y/n) ?",ULTIMALINEA-1]
  360.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  361.  If RISPOSTA$="y"
  362.   TESTO=True
  363.   Proc TIC["Do you want to cut the text if it exceeds the screen right margin (y/n) ?",ULTIMALINEA]
  364.   RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  365.   If RISPOSTA$="y"
  366.    TESTOTAGLIATO=True
  367.   Else 
  368.    TESTOTAGLIATO=False
  369.   End If 
  370.  Else 
  371.   TESTO=False
  372.  End If 
  373.  Cls : Proc TIC["Do you want to see the invisible characters (y/n) ?",ULTIMALINEA]
  374.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  375.  If RISPOSTA$="y"
  376.   CARATTEREINVISIBILE=True
  377.  Else 
  378.   CARATTEREINVISIBILE=False
  379.  End If 
  380. End If 
  381. Cls 
  382. End Proc
  383. Procedure SETTASCHERMO
  384. '----------------
  385. 'Sets the screen 
  386. '----------------
  387. If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  388. ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  389. Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  390. Set Curs 170,85,170,85,170,85,170,85 : Palette $60,$CCC,0,0 : Pen 1 : Paper 0 : Cls 
  391. Flash 3,"(011,1)(033,2)(055,3)(077,4)(099,5)(0BB,6)(0DD,7)(0FF,8)(0DD,7)(0BB,6)(099,5)(077,4)(055,3)(033,2)"
  392. Wait Vbl : Limit Mouse 
  393. End Proc
  394. Procedure TIC[TESTO$,LINEA]
  395. '----------------------------- 
  396. 'Centres and inverts a string
  397. '----------------------------- 
  398. '-> Testo Invertito e Centrato by Stefano Regattin 
  399. 'i> 23 maggio 1996 
  400. 'm> 25 maggio 1996 
  401. '--------------------------------------------------------------------------  
  402. 'LINEA holds the line number where the string will be positioned; if is -1 
  403. ' (True) the string will be positioned at the position of the cursor 
  404. '--------------------------------------------------------------------
  405. If LINEA=True Then L=Y Curs Else L=LINEA
  406. Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  407. End Proc
  408. Procedure VISUALIZZA
  409. '--------------- 
  410. 'Shows the file
  411. '--------------- 
  412. MESSAGGIO1$=NOMEFILE$+Str$(Length(BANCO))+" Bytes..."
  413. MESSAGGIO2$="cursor up -> page up...cursor down -> page down..."
  414. MESSAGGIO3$="cursor up -> page up..."
  415. MESSAGGIO4$="cursor down -> page down..."
  416. MESSAGGIO5$="C -> credits...S -> Save the file...Esc -> exit..."
  417. M0DO$="View mode...Enter -> modify (only in exadecimal mode)..."
  418. BYTE=0 : PAGINA=0
  419. For POSIZIONE=0 To Length(BANCO)-1
  420. '------------------------------------------------------------------------
  421. 'The cycle For starts from zero to permit the numeration of the lines in 
  422. ' exadecimal starting from one 
  423. '------------------------------  
  424. TASTOPREMUTO$=Inkey$
  425. Exit If TASTOPREMUTO$=Chr$(27)
  426. DATO=Peek(Start(BANCO)+POSIZIONE)
  427. If ESADECIMALE=True
  428.  Add BYTE,1,1 To BYTEPERLINEA
  429.  If BYTE=1
  430.   Print At(0,);Hex$(POSIZIONE+1,7)-"$"+" ";
  431.  End If 
  432.  Proc MOSTRADATO
  433. Else 
  434.  If TESTO=True and TESTOTAGLIATO=True
  435.   If X Curs<79
  436.    If X Curs=0
  437.     If ULTIMACOLONNA=False
  438.      Proc MOSTRADATO
  439.     Else 
  440.      If DATO=10
  441.       ULTIMACOLONNA=False
  442.      End If 
  443.     End If 
  444.    Else 
  445.     Proc MOSTRADATO
  446.    End If 
  447.   Else 
  448.    Proc MOSTRADATO
  449.    If X Curs=0
  450.     Cmove ,-1 : ULTIMACOLONNA=True
  451.    End If 
  452.   End If 
  453.  Else 
  454.   Proc MOSTRADATO
  455.  End If 
  456.  If DATO=10 and TESTO=True
  457.   Print 
  458.  End If 
  459. End If 
  460. If ESADECIMALE=True
  461.  Print At(8+BYTEPERLINEA+BYTE*3-2,);Hex$(DATO,2)-"$";At(8+BYTE,);
  462.  If BYTE=BYTEPERLINEA and BYTEPERLINEA<18
  463.   Print 
  464.  End If 
  465. End If 
  466. If POSIZIONE=Length(BANCO)-1
  467.  PAGINA$="page"+Str$(PAGINA+1)+"..."
  468.  CARATTEREMESSAGGIO=0
  469.  Ink 1 : Bar 0,248 To 639,255 : Ink 0,1
  470.  Do 
  471.   Repeat 
  472.    TASTOPREMUTO$=Inkey$
  473.    If PAGINA=0
  474.     Proc MESSAGGIO[MESSAGGIO1$+PAGINA$+MESSAGGIO5$+M0DO$]
  475.    Else 
  476.     Proc MESSAGGIO[MESSAGGIO1$+PAGINA$+MESSAGGIO3$+MESSAGGIO5$+M0DO$]
  477.    End If 
  478.   Until TASTOPREMUTO$<>""
  479.   Exit If TASTOPREMUTO$=Chr$(27),2
  480.   If TASTOPREMUTO$="c"
  481.    Proc MERITI : Cls : Exit 
  482.   End If 
  483.   If TASTOPREMUTO$="s"
  484.    Proc SALVAILFILE
  485.   End If 
  486.   If TASTOPREMUTO$=Cup$ and PAGINA>0
  487.    Dec PAGINA : POSIZIONE=PAGINA(PAGINA)-1 : BYTE=0 : Cls : Exit 
  488.   End If 
  489.   Memorize X : Memorize Y 
  490.   If TASTOPREMUTO$=Chr$(13) and ESADECIMALE=True
  491.    Proc M0DIFICA
  492.   End If 
  493.  Loop 
  494. End If 
  495. '----------------------------------------------------------------- 
  496. 'The test IF POSIZIONE=Length(BANCO)-1 must be before of the test
  497. ' IF Y Curs=ULTIMALINEA to avoid a blank screen if the end of the file 
  498. ' coincides on screen with the latest line of data 
  499. '--------------------------------------------------
  500. If Y Curs=ULTIMALINEA
  501.  PAGINA$="page"+Str$(PAGINA+1)+"..."
  502.  CARATTEREMESSAGGIO=0
  503.  Ink 1 : Bar 0,248 To 639,255 : Ink 0,1
  504.  Do 
  505.   Repeat 
  506.    TASTOPREMUTO$=Inkey$
  507.    If PAGINA=0
  508.     Proc MESSAGGIO[MESSAGGIO1$+PAGINA$+MESSAGGIO4$+MESSAGGIO5$+M0DO$]
  509.    Else 
  510.     Proc MESSAGGIO[MESSAGGIO1$+PAGINA$+MESSAGGIO2$+MESSAGGIO5$+M0DO$]
  511.    End If 
  512.   Until TASTOPREMUTO$<>""
  513.   Exit If TASTOPREMUTO$=Chr$(27),2
  514.   If TASTOPREMUTO$="c"
  515.    Proc MERITI : Exit 
  516.   End If 
  517.   If TASTOPREMUTO$="s"
  518.    Proc SALVAILFILE
  519.   End If 
  520.   If TASTOPREMUTO$=Cup$ and PAGINA>0
  521.    Dec PAGINA : POSIZIONE=PAGINA(PAGINA)-1 : _ERRORE=0 : Exit 
  522.   End If 
  523.   If TASTOPREMUTO$=Cdown$
  524.    On Error Proc _ERRORE
  525.    Inc PAGINA : PAGINA(PAGINA)=POSIZIONE+1
  526.    If _ERRORE=0
  527.     Exit 
  528.    End If 
  529.   End If 
  530.   If TASTOPREMUTO$=Chr$(13) and ESADECIMALE=True
  531.    Proc M0DIFICA
  532.   End If 
  533.  Loop 
  534.  Cls : Rem Cancella lo schermo per una nuova videata  
  535. End If 
  536. Next POSIZIONE
  537. End Proc
  538. Procedure _ERRORE
  539. '------
  540. 'Error 
  541. '------
  542. _ERRORE=Errn
  543. If _ERRORE=23
  544.  Dec PAGINA
  545.  Get Block 1,0,248,640,8
  546.  Proc TIC["Sorry, maximum number of pages reached",ULTIMALINEA]
  547.  Wait 200
  548.  Put Block 1
  549. End If 
  550. Resume Next 
  551. End Proc